import { Dialog } from "vant";

// 图片压缩
export const imgPreview = (file, callback) => {
  let params = new FormData();
  console.log(file, "file---");
  if (file.size > 50 * 1024 * 1024) {
    Toast({
      message: "图片过大无法上传，请上传50MB以内的图片！",
      duration: 2000,
      forbidClick: true,
    });
    callback(false);
  } else {
    if (file.size > 7 * 1024 * 1024) {
      //将base64转换为文件
      function dataURLtoFile(dataurl, file) {
        var arr = dataurl.split(","),
          bstr = atob(arr[1]),
          n = bstr.length,
          u8arr = new Uint8Array(n);
        while (n--) {
          u8arr[n] = bstr.charCodeAt(n);
        }
        return new File([u8arr], file.name, {
          type: file.type,
        });
      }
      // 压缩图片
      function compress(img) {
        let canvas = document.createElement("canvas");
        let ctx = canvas.getContext("2d");
        //瓦片canvas
        let tCanvas = document.createElement("canvas");
        let tctx = tCanvas.getContext("2d");
        // let initSize = img.src.length;
        let width = img.width;
        let height = img.height;
        //如果图片大于四百万像素，计算压缩比并将大小压至400万以下
        let ratio;
        if ((ratio = (width * height) / 4000000) > 1) {
          // console.log("大于400万像素");
          ratio = Math.sqrt(ratio);
          width /= ratio;
          height /= ratio;
        } else {
          ratio = 1;
        }
        canvas.width = width;
        canvas.height = height;
        //    铺底色
        ctx.fillStyle = "#fff";
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        //如果图片像素大于100万则使用瓦片绘制
        let count;
        if ((count = (width * height) / 1000000) > 1) {
          // console.log("超过100W像素");
          count = ~~(Math.sqrt(count) + 1); //计算要分成多少块瓦片
          //      计算每块瓦片的宽和高
          let nw = ~~(width / count);
          let nh = ~~(height / count);
          tCanvas.width = nw;
          tCanvas.height = nh;
          for (let i = 0; i < count; i++) {
            for (let j = 0; j < count; j++) {
              tctx.drawImage(
                img,
                i * nw * ratio,
                j * nh * ratio,
                nw * ratio,
                nh * ratio,
                0,
                0,
                nw,
                nh
              );
              ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);
            }
          }
        } else {
          ctx.drawImage(img, 0, 0, width, height);
        }
        //进行最小压缩
        let ndata = canvas.toDataURL("image/jpeg", 0.3);
        tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;
        return ndata;
      }
      // 看支持不支持FileReader
      if (!file || !window.FileReader) {
        return;
      }
      if (/^image/.test(file.type)) {
        // 创建一个reader
        let reader = new FileReader();
        // 将图片转成 base64 格式
        reader.readAsDataURL(file);
        // 读取成功后的回调
        reader.onloadend = function() {
          let result = this.result;
          let img = new Image();
          img.src = result;
          //判断图片是否大于500K,是就直接上传，反之压缩图片
          if (this.result.length <= 100 * 1024) {
            // 上传图片
            let imageFile = dataURLtoFile(this.result, file);
            params.append("file", imageFile);
            callback(params);
          } else {
            img.onload = function() {
              let data = compress(img);
              // 上传图片
              let imageFile = dataURLtoFile(data, file);
              params.append("file", imageFile);
              callback(params);
            };
          }
        };
      }
    } else {
      params.append("file", file);
      callback(params);
    }
  }
};
export function copyText(text) {
  // 动态创建 textarea 标签
  const textarea = document.createElement("textarea");
  // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘，同时将 textarea 移出可视区域
  textarea.readOnly = "readonly";
  textarea.style.position = "absolute";
  textarea.style.left = "-9999px";
  // 将要 copy 的值赋给 textarea 标签的 value 属性
  textarea.value = text;
  // 将 textarea 插入到 body 中
  document.body.appendChild(textarea);
  // 选中值并复制
  textarea.select();
  const result = document.execCommand("Copy");
  document.body.removeChild(textarea);
  return result;
}
// 身份证用星隐藏
export function cardSecret(data) {
  if (data) {
    return data.replace(/^(.{6})(?:\w+)(.{4})$/, "$1********$2");
  }
}
// 手机号码用星隐藏
export function phoneFilter(val) {
  if (val) {
    let reg = /^(.{3}).*(.{4})$/;
    return String(val).replace(reg, "$1****$2");
  }
}
// 银行卡用星隐藏
export function bankCard(str) {
  if (str.length <= 8) {
    console.log(str.length);
    if (str) {
      var reg = /^(\d{1})\d+(\d{1})$/;
      return String(str).replace(reg, "$1******$2");
    }
  } else {
    if (str) {
      var reg = /^(\d{4})\d+(\d{4})$/;
      return String(str).replace(reg, "$1 **** **** $2");
    }
  }
}
// 保存图片到手机 a标签下载
// export function savePicture(Url){
//     var blob=new Blob([''], {type:'application/octet-stream'});
//     var url = URL.createObjectURL(blob);
//     var a = document.createElement('a');
//     a.href = Url;
//     a.download = Url.replace(/(.*\/)*([^.]+.*)/ig,"$2").split("?")[0];
//     var e = document.createEvent('MouseEvents');
//     e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
//     a.dispatchEvent(e);
//     URL.revokeObjectURL(url);
// }
// 保存图片到手机 原生交互
export function savePicture(Url) {
  try {
    var that = this;
    var u = navigator.userAgent;
    var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //android终端
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    if (isAndroid) {
      injectedObject.downloadImg(Url);
    }
    if (isiOS) {
      function setupWebViewJavascriptBridge(callback) {
        if (window.WebViewJavascriptBridge) {
          return callback(WebViewJavascriptBridge);
        }
        if (window.WVJBCallbacks) {
          return window.WVJBCallbacks.push(callback);
        }
        window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组，并将 callback 插入到数组中。
        var WVJBIframe = document.createElement("iframe"); // 创建一个 iframe 元素
        WVJBIframe.style.display = "none"; // 不显示
        WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__"; // 设置 iframe 的 src 属性
        document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
        setTimeout(function() {
          document.documentElement.removeChild(WVJBIframe);
        }, 0);
      }
      // 这里主要是注册 OC 将要调用的 JS 方法。
      setupWebViewJavascriptBridge(function(bridge) {
        bridge.callHandler("downloadImg", { data: Url }, function(dataFromOC) {
          console.log(dataFromOC, "dataFromOC--");
          document.getElementById("returnValue").value = dataFromOC;
        });
      });
    }
    console.log(u, injectedObject, Url);
  } catch (err) {
    console.log(err);
  }
}
export function pageJump() {
  var that = this;
  var u = navigator.userAgent;
  var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //android终端
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
  if (isAndroid) {
    injectedObject.payeeAccount();
  }
  if (isiOS) {
    function setupWebViewJavascriptBridge(callback) {
      if (window.WebViewJavascriptBridge) {
        return callback(WebViewJavascriptBridge);
      }
      if (window.WVJBCallbacks) {
        return window.WVJBCallbacks.push(callback);
      }
      window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组，并将 callback 插入到数组中。
      var WVJBIframe = document.createElement("iframe"); // 创建一个 iframe 元素
      WVJBIframe.style.display = "none"; // 不显示
      WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__"; // 设置 iframe 的 src 属性
      document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
      setTimeout(function() {
        document.documentElement.removeChild(WVJBIframe);
      }, 0);
    }
    // 这里主要是注册 OC 将要调用的 JS 方法。
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.callHandler("payeeAccount", { data: "payeeAccount" }, function(
        dataFromOC
      ) {
        console.log(dataFromOC, "dataFromOC--");
        document.getElementById("returnValue").value = dataFromOC;
      });
    });
  }
}

export function signature() {
  var that = this;
  var u = navigator.userAgent;
  var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //android终端
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
  if (isAndroid) {
    injectedObject.signatureDialog();
  }
  if (isiOS) {
    function setupWebViewJavascriptBridge(callback) {
      if (window.WebViewJavascriptBridge) {
        return callback(WebViewJavascriptBridge);
      }
      if (window.WVJBCallbacks) {
        return window.WVJBCallbacks.push(callback);
      }
      window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组，并将 callback 插入到数组中。
      var WVJBIframe = document.createElement("iframe"); // 创建一个 iframe 元素
      WVJBIframe.style.display = "none"; // 不显示
      WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__"; // 设置 iframe 的 src 属性
      document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
      setTimeout(function() {
        document.documentElement.removeChild(WVJBIframe);
      }, 0);
    }
    // 这里主要是注册 OC 将要调用的 JS 方法。
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.callHandler(
        "signatureDialog",
        { data: "signatureDialog" },
        function(dataFromOC) {
          console.log(dataFromOC, "dataFromOC--");
          document.getElementById("returnValue").value = dataFromOC;
        }
      );
    });
  }
}
export function settlement() {
  var that = this;
  var u = navigator.userAgent;
  var isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //android终端
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
  if (isAndroid) {
    injectedObject.settlementSetUp();
  }
  if (isiOS) {
    function setupWebViewJavascriptBridge(callback) {
      if (window.WebViewJavascriptBridge) {
        return callback(WebViewJavascriptBridge);
      }
      if (window.WVJBCallbacks) {
        return window.WVJBCallbacks.push(callback);
      }
      window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组，并将 callback 插入到数组中。
      var WVJBIframe = document.createElement("iframe"); // 创建一个 iframe 元素
      WVJBIframe.style.display = "none"; // 不显示
      WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__"; // 设置 iframe 的 src 属性
      document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
      setTimeout(function() {
        document.documentElement.removeChild(WVJBIframe);
      }, 0);
    }
    // 这里主要是注册 OC 将要调用的 JS 方法。
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.callHandler(
        "settlementSetUp",
        { data: "settlementSetUp" },
        function(dataFromOC) {
          console.log(dataFromOC, "dataFromOC--");
          document.getElementById("returnValue").value = dataFromOC;
        }
      );
    });
  }
}

// 日期格式化
export function dateFtt(fmt, date) {
  date = new Date(date);
  // fmt 格式化时间格式 yyyy-MM-dd hh:mm:ss
  var o = {
    "M+": date.getMonth() + 1, // 月份
    "d+": date.getDate(), // 日
    "h+": date.getHours(), // 小时
    "m+": date.getMinutes(), // 分
    "s+": date.getSeconds(), // 秒
    "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds(), // 毫秒
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  }
  for (var k in o) {
    if (new RegExp("(" + k + ")").test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
    }
  }
  return fmt;
}
// 支付宝支付 回调form提交
export function payFormSubmit(formString) {
  let div = document.querySelector("#payDiv");
  // 如果页面已经存在payDiv，则只要修改payDiv的innerHTML就可以了，否则提交的表单永远是第一个表单。
  if (!div) {
    div = document.createElement("div");
    div.id = "payDiv";
    document.body.appendChild(div);
  }
  div.innerHTML = formString;
  document.querySelector("#payDiv>form").submit();
}
export function isTrue(val) {
  return val != null && val != undefined && val != "";
}

/**
 * @desc 弹窗
 * @param { String } type 类型  alert confirm
 * @param { Object } ops 配置
 * @param { Function } cb 回调函数(注意作用域)
 */
export function dialogBox(type = "confirm", ops = {}, cb) {
  if (!type || typeof type !== "string") throw new TypeError("type类型不正确");
  const options = {
    title: "提示",
  };
  Object.assign(options, ops);
  switch (type) {
    case "alert":
      Dialog.alert(options).then(() => {
        cb && typeof cb === "function" && cb();
      });
      break;
    case "confirm":
      Dialog.confirm(options).then(() => {
        cb && typeof cb === "function" && cb();
      });
      break;
    default:
      break;
  }
}

// 去除空字段
export const removePropertyOfNull = function(obj) {
  Object.keys(obj).forEach((item) => {
    if (obj[item] === "") delete obj[item];
    if (item.indexOf("$") !== -1) delete obj[item];
    if (typeof obj[item] == "string") {
      obj[item] = obj[item].trim();
    }
  });
  return obj;
};

// 匹配所有中文
export const matchChinese = (str, symbol) => {
  const reg = /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/g;
  return str.replace(reg, symbol);
};
